การ Thrash ในหน่วยความจำเสมือน ของ Thrash

ปรากฏการณ์ Thrash

การ Thrash ในหน่วยความจำเสมือน เกิดจากการที่โปรเซสหลายโปรเซสสับเปลี่ยนหน้า (page) ของตนเองเข้าทำงานในหน่วยความจำกายภาพ จนกระทั่งหน่วยความจำกายภาพเต็ม และมีโปรเซสเข้าทำงานอีกจำนวนมาก ทำให้เมื่อโปรเซสเริ่มทำงาน ก็จะมีการสับเปลี่ยนหน้า (page) ของโปรเซสอื่นออกแล้วเอาหน้าของโปรเซสที่จะทำงานสับเปลี่ยนเข้ามาแทนการสับเปลี่ยนหน้านั้นเป็นการติดต่อกับฮาร์ดดิสก์ ซึ่งใช้เวลาในการเข้าถึงนานมาก พอโปรเซสนี้ทำงานเสร็จ ก่อนโปรเซสอื่นเข้ามาทำงานก็ต้องมีการสับเปลี่ยนหน้า (page) ของโปรเซสนั้นเข้ามาอีกและเอาหน้าของโปรเซสแรกออกไป ทำให้ทุกๆโปรเซส ต้องเสียเวลาการทำงานในส่วนที่สับเปลี่ยนหน้านี้มาก อีกทั้งในช่วงที่สับเปลี่ยนหน้า CPU จะว่าง จึงนำโปรเซสใหม่เข้ามาอีก ซึ่งยิ่งสร้างปัญหาเข้าไปอีก จึงให้ประสิทธิภาพการทำงานของคอมพิวเตอร์ลดลงอย่างมาก

วิธีการตรวจสอบ Thrash โดยใช้ Working-Set Model

WorkingSet

Working-Set คือเซตของ page ที่ถูกใช้ในช่วงใดๆช่วงหนึ่งซึ่งอาจถูกกำหนดโดยเวลา หรือจำนวนคำสั่ง อาทิ 5 มิลลิวินาที หรือ 10,000 คำสั่ง เป็นต้น เรียกช่วงที่ถูกกำหนดว่า(Working-Set Window : Δ {\displaystyle \Delta } )

Working Set ที่มีขนาดใหญ่แสดงว่าในขณะนั้นมีการใช้งานทรัพยากรเป็นจำนวนมากในระยะเวลาสั้นซึ่งอาจเกิด Thrash ได้ วิธีการป้องกัน Thrash ก็คือ การตั้งลิมิตไม่ให้ขนาดของ Working Set มีค่าเกินค่าค่าหนึ่งนั่นเองเมื่อ Working Set มีขนาดมากกว่าค่าลิมิต ก็ต้องกันไม่ให้โปรเซสใหม่เข้าทำงาน และเลือกลบโปรเซสบางตัวออกบ้างจนกว่า Working Set จะมีขนาดน้อยกว่าค่าลิมิตที่ตั้งไว้

Page Fault Frequency

Page Fault Frequency เป็นอีกวิธีการหนึ่งที่การป้องการ Thrash โดยการนับความถี่ของการที่เกิด Page Faultถ้าเกิดความถี่ของ Page Fault มากเกินไป โดยเราจะกำหนดขีดจำกัดบน ( Upper Threshold )คือถ้ามากกว่าที่เราตั้งไว้ แสดงว่าเกิด Page Fault หลายครั้ง ก็จะควรป้องกันไม่ให้โปรเซสใหม่เข้ามาทำงาน และลดจำนวนโปรเซสลง แต่ถ้าความถี่ในการเกิด Page Fault น้อยเกินไปโดยเราจะกำหนดขีดจำกัดล่าง ( Lower Threshold ) คือถ้าน้อยกว่าค่านี้ แสดงว่ามีทรัพยากรมีเพียงพอก็ให้โปรเซสใหม่เข้ามาทำงานได้

สำหรับวิธีการหาความถี่ทำได้โดยเก็บเวลาสุดท้ายที่เกิด page fault ( t 0 {\displaystyle t_{0}} )เอาไว้ และเมื่อเกิด page fault ก็นำเวลาปัจจุบันลบด้วยเวลาที่ครั้งสุดท้ายที่เกิด page fault แล้วหาส่วนกลับ ก็จะได้ความถี่

f = 1 t − t 0 {\displaystyle f={\frac {1}{t-t_{0}}}}